package com.tianya.domain.enums;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;

@Getter
@ApiModel("错误枚举信息")
public enum Message {
    // 通用错误
    SUCCESS(200, "操作成功"),
    ERROR(500, "系统内部错误"),
    PARAM_ERROR(400, "参数错误"),
    NOT_FOUND(404, "资源不存在"),
    METHOD_NOT_ALLOWED(405, "请求方法不支持"),
    UNSUPPORTED_MEDIA_TYPE(415, "不支持的媒体类型"),
    TOO_MANY_REQUESTS(429, "请求过于频繁"),

    // 用户认证模块
    AUTH_FAILED(401, "认证失败"),
    INVALID_TOKEN(401, "无效的令牌"),
    TOKEN_EXPIRED(401, "令牌已过期"),
    USERNAME_PASSWORD_ERROR(401, "用户名或密码错误"),
    USER_DISABLED(403, "用户已被禁用"),

    // 权限管理模块
    PERMISSION_DENIED(403, "权限不足"),
    ROLE_NOT_FOUND(404, "角色不存在"),

    // 用户管理模块
    USER_NOT_FOUND(404, "用户不存在"),
    USERNAME_EXISTS(400, "用户名已存在"),
    EMAIL_EXISTS(400, "邮箱已存在"),
    PHONE_EXISTS(400, "手机号已存在"),

    // 班级管理模块
    CLASS_NOT_FOUND(404, "班级不存在"),
    CLASS_EXISTS(400, "班级已存在"),

    // 课程管理模块
    COURSE_NOT_FOUND(404, "课程不存在"),
    COURSE_EXISTS(400, "课程已存在"),

    // 订单管理模块
    ORDER_NOT_FOUND(404, "订单不存在"),
    ORDER_PAYMENT_ERROR(400, "订单支付错误"),
    ORDER_STATUS_ERROR(400, "订单状态错误"),

    // 考试管理模块
    EXAM_NOT_FOUND(404, "考试不存在"),
    EXAM_TIME_CONFLICT(400, "考试时间冲突"),

    // 成绩管理模块
    SCORE_NOT_FOUND(404, "成绩不存在"),
    SCORE_ALREADY_EXISTS(400, "成绩已存在"),

    // 异常考勤模块
    ATTENDANCE_NOT_FOUND(404, "考勤记录不存在"),

    // 请假管理模块
    LEAVE_NOT_FOUND(404, "请假申请不存在"),
    LEAVE_STATUS_ERROR(400, "请假状态错误"),

    // 家访记录模块
    HOME_VISIT_NOT_FOUND(404, "家访记录不存在"),

    // 文件上传模块
    FILE_UPLOAD_ERROR(500, "文件上传失败"),
    FILE_EMPTY(400, "上传文件不能为空"),
    FILE_TYPE_ERROR(400, "文件类型错误"),
    FILE_SIZE_EXCEED(400, "文件大小超过限制"),

    // 数据导入导出模块
    IMPORT_ERROR(500, "数据导入失败"),
    EXPORT_ERROR(500, "数据导出失败"),
    DATA_FORMAT_ERROR(400, "数据格式错误"),
    USER_ROLE_ERROR(400,"用户身份错误"),
    USER_EXIST(400, "用户已存在");

    @ApiModelProperty("错误码")
    private final int code;

    @ApiModelProperty("错误信息")
    private final String message;

    Message(int code, String message) {
        this.code = code;
        this.message = message;
    }
}